/*
Problem Description
假设一个班有n(n<=50)个学生，每人考m(m<=5)门课，求每个学生的平均成绩和每门课的平均成绩，并输出各科成绩均大于等于平均成绩的学生数量。
Input
输入数据有多个测试实例，每个测试实例的第一行包括两个整数n和m，分别表示学生数和课程数。然后是n行数据，每行包括m个整数（即：考试分数）。
Output
对于每个测试实例，输出3行数据，第一行包含n个数据，表示n个学生的平均成绩，结果保留两位小数；第二行包含m个数据，表示m门课的平均成绩，结果保留两位小数；第三行是一个整数，表示该班级中各科成绩均大于等于平均成绩的学生数量。
每个测试实例后面跟一个空行。
Sample Input
2 2
5 10
10 20
Sample Output
7.50 15.00
7.50 15.00
1
 */
package com.yuan.algorithms.training20150719;

import java.util.Scanner;

public class 求平均成绩 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		while (sc.hasNext()) {
			int n = sc.nextInt();
			int m = sc.nextInt();
			int[][] arr = new int[n][m];
			for (int i = 0; i < arr.length; i++) {
				for (int j = 0; j < arr[0].length; j++) {
					arr[i][j] = sc.nextInt();
				}
			}
			double[] gpaStudent = new double[n];
			double[] gpaCourse = new double[m];
			int k = 0;
			for (int i = 0; i < arr.length; i++) {
				double sum = 0;
				for (int j = 0; j < arr[0].length; j++) {
					sum += arr[i][j];
				}
				gpaStudent[i] = sum / m;
			}
			for (int j = 0; j < arr[0].length; j++) {
				double sum = 0;
				for (int i = 0; i < arr.length; i++) {
					sum += arr[i][j];
				}
				gpaCourse[j] = sum / n;
			}
			for (int i = 0, t = 0; i < arr.length; i++) {
				t = 0;
				for (int j = 0; j < arr[0].length; j++) {
					if (arr[i][j]>=gpaCourse[j]) {
						t++;
					}
				}
				if (t==m) {
					k++;
				}
			}
			for (int i = 0; i < gpaStudent.length; i++) {
				if (i==0) {
					System.out.printf("%.2f", gpaStudent[i]);
				}else {
					System.out.printf(" %.2f", gpaStudent[i]);
				}
			}
			System.out.println();
			for (int i = 0; i < gpaCourse.length; i++) {
				if (i==0) {
					System.out.printf("%.2f", gpaCourse[i]);
				}else {
					System.out.printf(" %.2f", gpaCourse[i]);
				}
			}
			System.out.println();
			System.out.println(k);
			System.out.println();
		}
	}

}
